package com.bd;
abstract class Person{
    protected String name;
    protected String gender;
    public Person(String name,String gender){
        this.name=name;
        this.gender=gender;
    }
    public void print(){
        System.out.println("Person中：" + name+" "+gender);
    }
    public void show(){
        System.out.println(name+" "+gender);
    }
//    动态多态要在父类中声明子类方法的函数体
    public abstract void othershow();
}
class Student extends Person{
    int no;
    double score;
    public Student(int no,double score,String name,String gender){
        super(name,gender);
        this.no=no;
        this.score=score;
    }
    //覆盖父类的show函数
    public void show(){
        System.out.println(name+" "+gender+" "+no+" "+" "+score);
    }

    //间接调用被覆盖的函数
    public void othershow(){
        this.show();
        super.show();
    }
}
public class extendscover {
    public static void main(String[] args) {
//    动态多态：父类型的引用指向派生类对象
        Person p=new Student(1001,99.9,"张三","男");
        Student s=new Student(1002,59.9,"李四","女");
//        p.print();//派生类继承下来的
//        p.show();//派生类自己的版本，因为父类的版本被覆盖了
//        s.print();//派生类继承下来的
//    父类的show只是被覆盖，内存中任然存在，可以通过其他函数简介调用
//    p是动态多态，想要调用子类的函数，其自身至少要有函数的声明
        s.othershow();
//        p.othershow();
    }
}
